<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/vue/2.6.11/vue.min.js"></script>
</head>
<body>
    <div id="app">
        <my-component></my-component>
        {{msg}}
    </div>

    <template id="t1">
        <div>
            Vue组件 {{msg}} <br>
            <button @click="f1">点点</button>
        </div>
    </template>

    <script>
        /*
            我们已经知道，Vue实例，是有属性和方法的
            Vue组件其实也是Vue实例，也就是说，Vue组件也可以拥有属性和方法！

            注意，Vue组件的属性，定义方式与Vue父组件的定义方式是不同的！
            Vue组件的属性，还是需要使用data来定义，但是
            1. data后面必须跟一个funcation
            2. 该function必须返回一个json
            3. 在该json中，写的才是子组件本身的属性！


            Vue组件的方法，定义的方式与父组件一样。没什么特殊的。

            要强调的是：父子组件之间不能直接调用对方的属性或方法。
        */

        Vue.component("myComponent", {
            template: "#t1",
            data: function() {
                return {
                    msg: "子组件msg"
                }
            },
            methods: {
                f1() {
                    console.log("子组件 f1()");
                }
            }
        });

        var app = new Vue({
            el: "#app",
            data: {
                msg: "父组件msg"
            },
            methods: {
                f1() {
                    console.log("父组件 f1()");
                }
            }
        });
    </script>    
</body>
</html>